package com.colabo.j2ee.web.core.persistence;

/**
 * iBatis查询及分页管理类<br> 
 * 描述: 在使用iBatis进行分页查询时，可使用此类为参数，并返回相应查询结果及总记录数（如果需要）。
 * 特别说明：由于iBatis采用的查询分页技术不是数据库本身的分页技术，而是采用ResultSet的absolute定位技术，
 * 需要把查询结果全部装入ResultSet再定位。如果查询结果较大（1万条记录以上)，效率会很低, 建议使用Hibernate的查询分页技术。
 * 如果需要返回查询总记录数(countTotalSize = true)，需要再执行一个统计总记数的查询。
 */
public class SqlWrapper extends AbstractWrapper {
	/**
	 * 查询Sql Map语句id
	 */
	private String statementId;

	/**
	 * 统计总记数查询的Sql Map语句id
	 */
	private String countStatementId;

	/**
	 * 查询参数值对象(可为Javabean,Map等)
	 */
	private Object paramValue;

	public SqlWrapper() {
		super();
		statementId = null;
		countStatementId = null;
		paramValue = null;
	}

	/**
	 * 设置iBatis执行查询语句Sql Map的statementId及执行查询总计数(如果需要返回查询总记录数)<br>
	 * 示例如下<br>
	 * 
	 * <pre>
	 * //一、用普通Javabean作为参数查询：
	 * <br>
	 * IwbFrameCodeTypeVO codeTypeObj = new IwbFrameCodeTypeVO();
	 * codeTypeObj.setCodeType(&quot;0010&quot;);
	 * codeTypeObj.setCodeTypeName(&quot;机构类型&quot;);
	 * &lt;p/&gt;
	 * sqlWrapper.setParameter(&quot;codeType.searchCodeType&quot;,&quot;codeType.countCodeTypeCount&quot;,codeTypeObj);
	 * &lt;p/&gt;
	 * //二、用Map作为参数查询：
	 * <br>
	 * Map map = new HashMap();
	 * map.put(&quot;codeType&quot;,&quot;0010&quot;);
	 * map.put(&quot;codeTypeName&quot;,&quot;机构类型&quot;);
	 * &lt;p/&gt;
	 * sqlWrapper.setParameter(&quot;codeType.searchCodeType&quot;,&quot;codeType.countCodeTypeCount&quot;,map);
	 * &lt;p/&gt;
	 * //三、配置SQL Map文件
	 * &lt;sqlMap namespace=&quot;codeType&quot;&gt;
	 * &lt;p/&gt;
	 * &lt;typeAlias alias=&quot;IwbFrameCodeTypeVO&quot; type=&quot;com.cib.capframework.base.model.IwbFrameCodeType&quot;/&gt;
	 * &lt;p/&gt;
	 * &lt;resultMap id=&quot;IwbFrameCodeTypeResult&quot; class=&quot;com.cib.capframework.base.model.IwbFrameCodeType&quot;&gt;
	 * &lt;result column=&quot;code_type&quot; property=&quot;codeType&quot; jdbcType=&quot;VARCHAR&quot;/&gt;
	 * &lt;result column=&quot;code_type_name&quot; property=&quot;codeTypeName&quot; jdbcType=&quot;VARCHAR&quot;/&gt;
	 * &lt;/resultMap&gt;
	 * &lt;p/&gt;
	 * &lt;!--以下定义查询语句--&gt;
	 * &lt;select id=&quot;searchCodeType&quot; resultMap=&quot;IwbFrameCodeTypeResult&quot;  parameterClass=&quot;IwbFrameCodeTypeVO&quot;&gt;
	 * select code_type,code_type_name from iwb_frame_code_type
	 * where code_type =#codeType# and code_type_name = #codeTypeName#
	 * &lt;/select&gt;
	 * &lt;p/&gt;
	 * &lt;!--以下定义返回总记录数的查询语句--&gt;
	 * &lt;select id=&quot;countCodeTypeCount&quot; resultClass=&quot;int&quot; parameterClass=&quot;IwbFrameCodeTypeVO&quot;&gt;
	 * select count(*) as result from iwb_frame_code_type
	 * where code_type =#codeType# and code_type_name = #codeTypeName#
	 * &lt;/select&gt;
	 * &lt;p/&gt;
	 * &lt;/sqlMap&gt;
	 * </pre>
	 * 
	 * @param statementId
	 *            调用iBatis的SqlMap文件的声明段名，规则名：SqlMap的namespace+"." +
	 *            该sqlMap文件某片段的id
	 * @param countStatementId
	 *            统计总记数查询的Sql Map语句的声明段名，规则名：SqlMap的namespace+"." +
	 *            该sqlMap文件某片段的id
	 * @param paramValue
	 *            查询条件的值，可为JavaBean,Map对象。
	 */
	public void setParameter(String statementId, String countStatementId, Object paramValue) {
		this.statementId = statementId;
		this.countStatementId = countStatementId;
		this.paramValue = paramValue;
	}

	public String getStatementId() {
		return statementId;
	}

	public void setStatementId(String statementId) {
		this.statementId = statementId;
	}

	public String getCountStatementId() {
		return countStatementId;
	}

	public void setCountStatementId(String countStatementId) {
		this.countStatementId = countStatementId;
	}

	public Object getParamValue() {
		return paramValue;
	}

	public void setParamValue(Object paramValue) {
		this.paramValue = paramValue;
	}
}
